package org.vm.cmbcdirect.component.service;

import net.sf.json.JSONObject;
import org.apache.log4j.Logger;
import org.vm.cmbcdirect.component.utils.ImageUtil;
import org.vm.cmbcdirect.component.utils.StringRoleUtil;
import org.vm.cmbcdirect.utils.BaseUtil;
import org.vm.cmbcdirect.utils.HttpUtil;

import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * Created by violorch on 2016/3/24.
 */
public class AnaylsisFacePic {

    private final static Logger LOGGER = Logger.getLogger(AnaylsisFacePic.class);

    /**
     * 获取Face_id
     *
     * 可选	mode	检测模式可以是normal(默认) 或者 oneface 。在oneface模式中，检测器仅找出图片中最大的一张脸。
     attribute	可以是none或者由逗号分割的属性列表。默认为gender, age, race, smiling。目前支持的属性包括：gender, age, race, smiling, glass, pose
     tag	可以为图片中检测出的每一张Face指定一个不包含^@,&=*'"等非法字符且不超过255字节的字符串作为tag，tag信息可以通过 /info/get_face 查询
     async	如果置为true，该API将会以异步方式被调用；也就是立即返回一个session id，稍后可通过/info/get_session查询结果。默认值为false。
     * **/
    private final static String FACE_DETECT = BaseUtil.getFaceApiUrl() + "/detection/detect";
    public String getFaceId(File file, String mode,String attribute, String tag, boolean async) {
        Pattern pattern = Pattern.compile("\\.\\w*");
        Matcher matcher = pattern.matcher(file.getName());
        String img = ImageUtil.getImageBinary(file.getAbsolutePath(), matcher.group(0));

        List<String> params = new ArrayList<>();
        params.add("img=" + img);
        if (mode != null)   params.add("mode=" + mode);
        if (attribute != null)  params.add("attribute=" + attribute);
        if (tag != null)    params.add("tag=" + tag);
        if (async)  params.add("async=true");

        JSONObject resultJson = HttpUtil.httpRequest(FACE_DETECT + StringRoleUtil.joinString(params), "POST", null);
        // TODO
        return "";
    }


    /**
     * 关键点获取
     * @param type
     *
     * **/
    private final static String FACE_LANDMARK_URL = BaseUtil.getFaceApiUrl() + "/detection/landmark";
    public String getLandMark(File file, String type) {

        //TODO

        return "";
    }

}
